package 面向对象;
/**
  策略模式:
    定义一系列的算法，将每一种算法封装起来，并可以相互替换使用
	策略模式让算法独立于使用它的客户应用而独立变化
*/
public class 接口2应用之策略模式
{
	public static void main(String[] args){
		BaseService bs= new UserService();
		bs.setSave(new NetSave());//通过修改new的对象实现不同保存方式，不需要修改大量代码
		bs.add("lalala");
	}
}

//根据不同需求，定义一系列算法
interface Isave{
	void save(String data);
}
class FileSave implements Isave{
	public void save(String data){
		System.out.println("保存数据到文件....."+data);
	}
}
class NetSave implements Isave{
	public void save(String data){
		System.out.println("保存数据到网络....."+data);
	}
}
//面向接口编程，
abstract class BaseService{
	private Isave isave;//设置接口对象为属性
	//设置不同实现方式的接口类
	public void setSave(Isave isave){
		this.isave=isave;
	}
	//具体方法操作
	public void add(String data){
		System.out.println("检查数据有效性...");
		isave.save(data);
		System.out.println("保存数据完毕.....");
	}
}

class UserService extends BaseService{
	//其他实现方法略
}
